# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1UploadModelRequest do
  @moduledoc """
  Request message for ModelService.UploadModel.

  ## Attributes

  *   `model` (*type:* `GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1Model.t`, *default:* `nil`) - Required. The Model to create.
  *   `modelId` (*type:* `String.t`, *default:* `nil`) - Optional. The ID to use for the uploaded Model, which will become the final component of the model resource name. This value may be up to 63 characters, and valid characters are `[a-z0-9_-]`. The first character cannot be a number or hyphen.
  *   `parentModel` (*type:* `String.t`, *default:* `nil`) - Optional. The resource name of the model into which to upload the version. Only specify this field when uploading a new version.
  *   `serviceAccount` (*type:* `String.t`, *default:* `nil`) - Optional. The user-provided custom service account to use to do the model upload. If empty, [Vertex AI Service Agent](https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents) will be used to access resources needed to upload the model. This account must belong to the target project where the model is uploaded to, i.e., the project specified in the `parent` field of this request and have necessary read permissions (to Google Cloud Storage, Artifact Registry, etc.).
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :model => GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1Model.t() | nil,
          :modelId => String.t() | nil,
          :parentModel => String.t() | nil,
          :serviceAccount => String.t() | nil
        }

  field(:model, as: GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1Model)
  field(:modelId)
  field(:parentModel)
  field(:serviceAccount)
end

defimpl Poison.Decoder,
  for: GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1UploadModelRequest do
  def decode(value, options) do
    GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1UploadModelRequest.decode(value, options)
  end
end

defimpl Poison.Encoder,
  for: GoogleApi.AIPlatform.V1.Model.GoogleCloudAiplatformV1UploadModelRequest do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
